#include "recboxitem.h"
#include "ui_recboxitem.h"
#include <QPropertyAnimation>
 #include <QDebug>
RecBoxItem::RecBoxItem(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecBoxItem)
{
    ui->setupUi(this);
    ui->musicImageBox->installEventFilter(this);
}
bool RecBoxItem::eventFilter(QObject *watched, QEvent *event)
{
    // 检查被监视的对象是否是ui->musicImageBox
    if(watched == ui->musicImageBox)
    {
        //获取musicImageBox宽度和高度
        int ImgWidget = ui->musicImageBox->width();
        int ImgHeight = ui->musicImageBox->height();

        // 检查事件类型是否为“鼠标进入”
        if(event->type() == QEvent::Enter)
        {
            //创建一个属性动画，目标对象是musicImageBox,属性是“geometry”（位置和大小）
            QPropertyAnimation* animation = new QPropertyAnimation(ui->musicImageBox, "geometry");
            //设置动画持续时间为100ms
            animation->setDuration(100);
            //设置动画起始值：从当前位置的（9，10）开始，保持原有大小
            animation->setStartValue(QRect(9,10,ImgWidget,ImgHeight));
            //设置动画结束值：移动到（9，0）位置，保持原有大小(向上移动10元素)
            animation->setEndValue(QRect(9, 0, ImgWidget, ImgHeight));
            //启动动画
            animation->start();

            //动画结束后删除动画对象，防止内存泄漏
            // 注意：动画结束的时候会触发finished信号，拦截到该信号，销毁animation
            //连接动画结束信号到一个Lambda表达式
            connect(animation, &QPropertyAnimation::finished, this, [=](){
                delete animation;
            });
            //返回true表示事件已经被处理，不需要继续传递
            return true;

        }
        //拦截鼠标离开事件
        else if(event->type() == QEvent::Leave)
        {
            // 拦截鼠标离开事件
            QPropertyAnimation* animation = new QPropertyAnimation(ui->musicImageBox, "geometry");
            //设置动画起始值:150ms
            animation->setDuration(150);
            animation->setStartValue(QRect(9,0,ImgWidget,ImgHeight));
            animation->setEndValue(QRect(9, 10, ImgWidget, ImgHeight));
            animation->start();

            // 注意：动画结束的时候会触发finished信号，拦截到该信号，销毁animation
            connect(animation, &QPropertyAnimation::finished, this, [=](){
             });
             return true;
        }
    }
     return QObject::eventFilter(watched, event);
}
void RecBoxItem::setRecText(const QString& text)
 {
    ui->recBoxItemText->setText(text);
 }
 void RecBoxItem::setRecImage(const QString& Imagepath)
 {
     //创建一个 QString 对象 imgStyle，内容为 CSS 样式字符串
     //该央视将background-image属性设置为Imagepath提供的路径
     // 例如：如果 Imagepath 是 ":/images/cover.png", 则 imgStyle 为 "background-image:url(:/images/cover.png)"
    QString imgStyle = "background-image:url(" + Imagepath + ")";
    //调用ui对象中recMUSICImage组件的setStylesheet方法
    //将上面构建的央视字符串引用到该组件


    //使得recMusicImage组件的背景显示为指定路径的图片
    ui->recMusicImage->setStyleSheet(imgStyle);
 }
RecBoxItem::~RecBoxItem()
{
    delete ui;
}
